Current graphics data processing includes systems and methods developed to perform a specific operation on graphics data, e.g., linear interpolation, tessellation, rasterization, texture mapping, depth testing, and the like. Traditionally graphics processors include several fixed function computation units to do such specific operations, and more recently, the computation units have a degree of programmability to perform user specified operations.
While computation units included in each graphics processor can vary, a common element is a sampling unit that processes graphics primitives and generates sub-primitive data, such as pixels or fragments. Graphics primitives include geometry, such as points, lines, triangles, quadrilaterals, meshes, and the like. A graphics processor uses a sampling unit and computation units to convert graphics primitives into sub-primitive data and generate image data.
Graphics processors use memory to store graphics data and program instructions, where graphics data is any data that is input to or output from the computation units within the graphics processor. Graphics memory is any memory used to store graphics data or program instructions to be executed by the graphics processor. Graphics memory can include portions of system memory, local memory directly coupled to the graphics processor, register files coupled to the computation units within the graphics processor, and the like.
The computation units within some graphics processors are coupled to each other to form a graphics pipeline such that the output of a first computation unit is coupled to the input of a second computation unit to form a node. Computation units are coupled in sequence to form additional nodes. Additional computational units can be connected between two nodes to form parallel computational units. Within the graphics pipeline processing can proceed simultaneously within each of the computational units.
Recently, graphics processors can be programmed using shader programs and vertex programs, permitting a wider variety of functions to be performed using these programmable graphics processors. Consequently functions that traditionally required dedicated fixed function hardware, such as video processing functions, can be performed using programmable graphics processors.
During the transfer of film to video each film frame is decomposed into an odd field including odd horizontal scan lines from a film frame and an even field including even horizontal scan lines from the film frame for display on an interlaced display such as an NTSC video display. An odd or even field is replicated every other film frame during 3:2 pulldown to compensate for the greater number of frames displayed per second during video playback. When film content is transferred using 3:2 pulldown, information indicating 3:2 pulldown was used may be encoded with the data. This information may be used by later progressive video decoding hardware to remove the replicated odd or even fields. Removal of the replicated fields reduces artifacts resulting from displaying temporally asynchronous fields synchronously. However, for some content, e.g., “extras” such as cut scenes, interviews, music videos, and the like, the pulldown information is not encoded or may not be accurate and visual artifacts can be introduced by improperly removing fields or by not removing replicated fields prior to display.
Accordingly, it is desirable to accurately detect the presence of 3:2 pulldown independent of the pulldown encoded information and to selectively determine which fields to display for each frame of progressive video. Furthermore, when possible it is desirable to use a programmable graphics processor, to perform the functions traditionally performed using dedicated fixed function hardware.